package jvm.quote;

import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;

import javax.sound.midi.Soundbank;
import java.lang.ref.SoftReference;
import java.util.concurrent.TimeUnit;

/**
 * @author cyt
 * @create 2020-09-11 18:13
 */
public class Soft {

    /**
     * 软引用， 用来描述那些还有用， 但是不是必须用的对象， 只被软引用关联着的对象
     * 在系统内存溢出之前，会把这些对象列进入回收范围之内进行二次回收， 如果回收之后
     * 内存还不够的话， 就抛出内存溢出的异常.
     * <p>
     * 可以在一些内存敏感的地方 进行使用, 高速缓存之类的
     * <p>
     * 内存够用的时候就保留软引用的可达对象
     * 内存不够的时候就回收可达对象
     *
     * @param args
     */
    public static void main(String[] args) {
        User cuiyt = new User(1, "cuiyt");
        SoftReference<User> reference = new SoftReference<User>(cuiyt);
        cuiyt = null;

        System.out.println(reference.get().toString());
        System.gc();
        System.out.println("after - > " + reference.get().toString());

        try {
            TimeUnit.SECONDS.sleep(3);
            byte[] bytes = new byte[1024 * 1024 * 7];
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println(reference.get());
        }
    }
}
